package com.io.filereaders;

import org.junit.Test;

import java.io.*;

public class Example01 {
    public static void main(String[] args) {
        System.out.println("fileReader 学习");
    }

    @Test
    public void createFile() {
        // 创建文件 并且写入相关内容
        String path = "E:\\test\\";
        File file = new File(path + "test.txt");
        FileOutputStream fileOutputStream = null;
        if (file.exists()) {
            System.out.println("文件已经存在");
            // 写入内容
        } else {
            // 创建文件
            try {
                boolean newFile = file.createNewFile();
                System.out.println(newFile?"创建成功":"创建失败");
                // 写入文件内容
                if (newFile) {
                    fileOutputStream = new FileOutputStream(file,true);
                    String str = "hello,word中国";
                    fileOutputStream.write(str.getBytes());
                }
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("创建失败");
            } finally {
                // 关闭资源流
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void read() {
        // 输入流
        String path = "E:\\test\\test.txt";
        FileInputStream fileInputStream = null;
        // 多字节读取内容
        int read = 0;
        byte[] buf = new byte[1024];
        try {
            fileInputStream = new FileInputStream(path);
            // 读取内容（字节读取）
            while ( (read = fileInputStream.read(buf)) != -1) {
                // 不会乱码
                System.out.println(new String(buf,0,read));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 资源关闭
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 单个字符读取文件
     */
    @Test
    public void fileReads() {
        // 单字符读取方案 -- 中文不会乱码 但是效率低下
        String filePath = "E:\\test\\read.txt";
        // 字符操作读取文件内容
        FileReader fileReader = null;
        int read = 0;
        try {
            fileReader = new FileReader(filePath);
            // 字符读取内容 循环读取内容
            while ((read = fileReader.read()) != -1) {
                System.out.print((char)read);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 一次性读取多个字符操作
     */
    @Test
    public void moreRead() {
        /**
         * 1.创建文件流
         * 2.创建读取指定的字符长度
         * 3.使用read 循环读取内容
         * 4.使用String 字符串输出具体内容
         */
        String filePath = "E:\\test\\test.txt";
        // 字符操作读取文件内容
        FileReader fileReader = null;
        int read = 0;
        char[] buf = new char[8];
        try {
            fileReader = new FileReader(filePath);
            // 字符读取内容 循环读取内容
            // 返回 -1 ，证明文件读取结束
            while ((read = fileReader.read(buf)) != -1) {
                System.out.print(new String(buf,0,read));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
